#ifndef __VTOR_MENU_H
#define __VTOR_MENU_H

#ifdef __cplusplus
extern "C" {
#endif

#include "vtor_elec_module_config.h"

#ifdef __VTOR_MENU__

// 菜单允许的最大子项个数
#define	VTOR_MENU_CONFIG_CHILD_MAX	10
// 菜单名最长字符个数
#define	VTOR_MENU_CONFIG_ITEM_NAME_LEN	20

#define	VTOR_MENU_OPERATE_NULL			0
#define	VTOR_MENU_OPERATE_ENTER			1
#define	VTOR_MENU_OPERATE_ITEM_UP		2
#define	VTOR_MENU_OPERATE_ITEM_DOWN		3
#define	VTOR_MENU_OPERATE_ITEM_SELECT	4
#define	VTOR_MENU_OPERATE_VALUE_UP		5
#define	VTOR_MENU_OPERATE_VALUE_DOWN	6
#define	VTOR_MENU_OPERATE_VALUE_SET		7
#define	VTOR_MENU_OPERATE_CLICK_HANDLER	8

typedef struct VtorMenuStruct
{
	uint8_t name[VTOR_MENU_CONFIG_ITEM_NAME_LEN]; // 当前名
	int32_t value; // 每个菜单下只有1个值，同时显示
	struct VtorMenuStruct* item[VTOR_MENU_CONFIG_CHILD_MAX]; // 子菜单项
	uint8_t itemIdx; // 当前项，
	uint8_t itemCnt; // 当前菜单下有多少项
}VtorMenu;

extern VtorMenu* VtorMenu_curMenu;


void VtorMenu_Display(void);
void VtorMenu_Tree(VtorMenu* menu); // 使用树形打印结构，便于分析
void VtorMenu_PreProcess(void); // 预处理，主要是给菜单项赋值
void VtorMenu_ReProcess(void); // 再处理，主要是将菜单项的值赋值给变量
void VtorMenu_Operate(uint8_t OperataType, int32_t opValue); // 用于实现用户操作
void VtorMenu_Relate(VtorMenu* menu, VtorMenu* subMenu);

// 用户实现并调用，初始化树形菜单
void VtorMenu_Init(void);
// 用户实现并调用，完成单个菜单项的显示
void VtorMenu_DisplaySubMenu(uint8_t itemIdx, VtorMenu* menu);
// 用户自行实现，vtormenu自动调用，单个菜单项的点击回调函数
void VtorMenu_ClickHandler(VtorMenu* menu);

#endif // __VTOR_MENU__

#ifdef __cplusplus
}
#endif

#endif
